#!/usr/bin/env node

const log = console.log;

const me = {
    name:'suziyi',
    age:20,
    qq:'1956113287'
};

log('name:%s',me.name);  //string
log('age:%d',me.age);    //digital
log('num:%i',20);        //integer
log('PI:%f',Math.PI);    //float
log('user:%j',me);       //对象json
log('me:%o',me);        //object

//使用四种不同的方式输出字符串信息
log('name:%s',me.name);  
log('name：',me.name); 
log('name：' +me.name); 
log(`name：${me.name}`); 

// 使用 console.dir() 输出对象和对象的数组
console.dir(me);
const users = [me, { name: '李四', age: 25, qq: '87654321' }];
console.dir(users);
// 使用 console.dir() 输出层次较深的对象
const complexObject = {
    name: "John Doe",
    age: 30,
    address: {
      street: "123 Main St",
      city: "Anytown",
      state: "CA",
      zip: "12345"
    },
    education: {
      highSchool: "Anytown High",
      college: {
        school: "University of Anywhere",
        degree: "B.S. in Computer Science",
        graduationYear: 2010
      }
    }
  };
console.dir(complexObject);

// 使用 console.table() 输出对象和对象的数组
console.table(users);
// 使用 console.table() 输出对象数组的某些字段
console.table(users, ['name','age']);

// 观察 index 列的区别
// 当你使用 console.table() 输出对象数组时，
// 每个行的左侧会有一个 index 列，显示数组中对象的索引。
// 对于单个对象使用 console.table() 时，不会有 index 列，因为只有一个对象。

const error = console.error;
error('Error! something wrong!');
// log(stdout)与error(stderr)输出流不一样

//验证输出流不一样
// 输出流重定向
// ./01-format.js 1>msg.txt
// cat msg.txt  //标准输出流
//  ./01-format.js 2>err.txt
//  cat err.txt  //标准错误流